home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Graphics Plus
/
Graphics Plus.iso
/
amiga
/
gui
/
prcgntn1.lha
/
Precognition
/
source
/
HScroller.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-12-23
|
7KB
|
238 lines
/* ==========================================================================
**
** HScroller.c
**
** ⌐1991 WILLISoft
**
** ==========================================================================
*/
#include <string.h>
#include "HScroller.h"
#include "minmax.h"
#include "HScrollerClass.h"
#include "EmbossedGadgetClass.h"
#include <proto/exec.h>
#include "amigamem.h"
tPoint HScroller_SetLocation( HScroller *self,
PIXELS LeftEdge,
PIXELS TopEdge )
{
Point Left_size, Slider_size;
Point Left_pos, Right_pos;
Left_size = Size( &self->leftarrow );
Slider_size = Size( &self->hslider );
SetLocation( &self->hslider, LeftEdge, TopEdge );
Left_pos.x = LeftEdge + Slider_size.x;
Left_pos.y = TopEdge;
SetLocation( &self->leftarrow, Left_pos.x, Left_pos.y );
Right_pos.x = Left_pos.x + Left_size.x;
Right_pos.y = TopEdge;
SetLocation( &self->rightarrow, Right_pos.x, Right_pos.y );
self->posr.Location.x = LeftEdge;
self->posr.Location.y = TopEdge;
return Location( self );
}
tPoint HScroller_private_AskSize( HScroller *self,
PIXELS Width,
PIXELS Height,
Point *Left_size,
Point *Right_size,
Point *Slider_size )
{
Point size;
*Left_size = AskSize( &self->leftarrow, 0, 0 );
*Right_size = AskSize( &self->rightarrow, 0, 0 );
Slider_size->x = Width - (Left_size->x + Right_size->x);
Slider_size->y = MAX( Left_size->y, Right_size->y );
*Slider_size = AskSize( &self->hslider, Slider_size->x, Slider_size->y );
size.x = Slider_size->x + Left_size->x + Right_size->x;
size.y = Slider_size->y;
return size;
}
tPoint HScroller_AskSize( HScroller *self,
PIXELS Width,
PIXELS Height )
{
Point Left_size, Right_size, Slider_size, size;
size = HScroller_private_AskSize( self, Width, Height,
&Left_size, &Right_size, &Slider_size );
return size;
}
tPoint HScroller_SetSize( HScroller *self,
PIXELS Width,
PIXELS Height )
{
tPoint Left_size, Right_size, Slider_size, size;
tPoint pos;
size = HScroller_private_AskSize( self, Width, Height,
&Left_size, &Right_size, &Slider_size );
SetSize( &self->leftarrow, Left_size.x, Left_size.y );
SetSize( &self->rightarrow, Right_size.x, Right_size.y );
SetSize( &self->hslider, Slider_size.x, Slider_size.y );
/* Now must fix the positions of leftarrow, down arrow. */
pos = Location( self );
SetLocation( self, pos.x, pos.y );
self->posr.Size = size;
return size;
}
#ifdef BUILDER
#include "BuilderMethods.h"
#include "GraphicObject_Builder.h"
#include "Positioner_Builder.h"
#include "Positioner_coder.h"
struct BuilderMethods HScroller_bm;
HScroller *HScroller_New( HScroller *self )
{
HScroller *new_HScroller = NULL;
if (new_HScroller = (HScroller *) Amalloc(sizeof(HScroller)))
{
HScroller_Init( new_HScroller, self->posr.Location.x, self->posr.Location.y,
self->posr.Size.x, self->Pens,
Title(self) );
GiveItAName( new_HScroller );
}
return new_HScroller;
}
#endif
BOOL HScroller_elaborated = FALSE;
struct PositionerClass HScroller_Class;
#include "VScrollerClass.h"
void HScrollerClass_Init( struct PositionerClass *class )
{
PositionerClass_Init( class );
class->isa = PositionerClass();
class->ClassName = "HScroller";
class->CleanUp = VScroller_CleanUp;
class->SetLocation = HScroller_SetLocation;
class->AskSize = HScroller_AskSize;
class->SetSize = HScroller_SetSize;
class->SizeFlags = GraphicObject_SizeFlagsX;
class->Render = VScroller_Render;
class->SetInteractorWindow = VScroller_SetInteractorWindow;
class->FirstGadget = VScroller_FirstGadget;
class->nGadgets = VScroller_nGadgets;
class->IDCMPFlags = VScroller_IDCMPFlags;
class->ClaimEvent = VScroller_ClaimEvent;
class->Respond = VScroller_Respond;
class->Refresh = VScroller_Refresh;
class->EnableIactor = VScroller_EnableIactor;
class->isEnabled = EmbossedGadget_isEnabled;
class->Activate = NULL;
class->isActive = NULL;
class->SetKnobSize = VScroller_SetKnobSize;
class->SetValue = VScroller_SetValue;
class->KnobSize = VScroller_KnobSize;
class->Value = VScroller_Value;
class->Title = VScroller_Title;
class->TextAlignment = VScroller_TextAlignment;
class->SetTitle = VScroller_SetTitle;
class->SetTextAlignment = VScroller_SetTextAlignment;
#ifdef BUILDER
go_InitBuilderMethods( &HScroller_bm );
HScroller_bm.New = HScroller_New;
HScroller_bm.PropEdit = Positioner_PropEdit;
HScroller_bm.WriteCode = Positioner_WriteCode;
class->BuilderMethods = &HScroller_bm;
#endif
}
struct PositionerClass *HScrollerClass( void )
{
if (! HScroller_elaborated)
{
HScrollerClass_Init( &HScroller_Class );
HScroller_elaborated = TRUE;
}
return &HScroller_Class;
}
void HScroller_Init( HScroller *self,
PIXELS LeftEdge,
PIXELS TopEdge,
PIXELS Width,
pcg_3DPens Pens,
char *label )
{
Gadget *g;
Positioner_Init(self);
self->posr.isa = HScrollerClass();
self->posr.Location.x = LeftEdge;
self->posr.Location.y = TopEdge;
self->Pens = Pens;
/*
** Initialize objects with dumb values, just so that they are now
** proper objects.
*/
ArrowGadget_Init( &self->leftarrow, LeftEdge, TopEdge,
LeftArrow, Pens );
ArrowGadget_Init( &self->rightarrow, LeftEdge, TopEdge,
RightArrow, Pens );
HSlider_Init( &self->hslider, LeftEdge, TopEdge, 0, 0, Pens, NULL );
self->hslider.eg.Next = &self->leftarrow;
self->leftarrow.Next = &self->rightarrow;
SetSize( self, Width, 0 );
/* Chain the gadgets together. */
g = FirstGadget( self );
ChainGadgets( g, FirstGadget( &self->leftarrow ) );
ChainGadgets( g, FirstGadget( &self->rightarrow ) );
SetTitle( self, label );
SetTextAlignment( self, tx_OUTSIDE | tx_LEFT | tx_YCENTER,
STD_XPAD, STD_YPAD );
}